//
//  NSDate+Extension.swift
//  NSDateTest--001
//
//  Created by FelixYin on 15/7/30.
//  Copyright © 2015年 felixios. All rights reserved.
//

import Foundation

extension NSDate {

    //将字符串转化成时间
    
    class func dateWithString(string:String) ->NSDate {
    
//        "Fri Jul 10 15:56:29 +0800 2015"
        
        //EEE 表示是星期的英文缩写  MMM是月份的英文缩写(MMMM是英文的全称)   zzzz是时区
      
        let dateForm = "EEE MMM dd HH:mm:ss zzzz yyyy"
        
        let formatter = NSDateFormatter()
        
        formatter.dateFormat = dateForm
        
        let date = formatter.dateFromString(string)
       
        
        //当解析时间失败，返回当前日期
    
        return date ?? NSDate()
    }
    
    
    
    /**
    返回当前日期的描述信息，格式如下：
    
    刚刚(一分钟内)
    X分钟前(一小时内)
    X小时前(当天)
    昨天 HH:mm(昨天)
    MM-dd HH:mm(一年内)
    yyyy-MM-dd HH:mm(更早期)
    */
    
    //提供一个对象函数，返回一个时间描述
    
    func dateDescription () ->String {
    
    
         //创建一个日历，以便时间的比较（是这整个函数的核心），最好的方式时从小到大，符合微博显示数据---》倒序
        
        //这样做的一个缺点就是，会每调用一次这个函数都会创建一个日历，但是函数调用完毕后，会被释放----”其实没有关系“，自己理解有问题
        
        let calendar = NSCalendar.currentCalendar()
        
        
        //今天分四种情况
        
        if calendar.isDateInToday(self) {
            
           
          //将时间转化成秒
            
          let sTimeInterval = self.timeIntervalSince1970
            
          let cTimeInterval = NSDate().timeIntervalSince1970
            
         
          //一分钟内
          if (cTimeInterval - sTimeInterval)/60 < 1 || (cTimeInterval - sTimeInterval)/60 == 1 {
            
            
              return "一分钟内"
            
            }
            
          //一小时内
            if (cTimeInterval - sTimeInterval)/60 < 60 {
            
            let s = "\(Int((cTimeInterval - sTimeInterval)/60))分钟前"
            
            return s
                
            }
        
        
          //24小时内
            
            if (cTimeInterval - sTimeInterval)/3600 < 24 {
            
            let h = "\(Int((cTimeInterval - sTimeInterval)/3600))小时前"
                
            return h
            
            }

        }
        
        
        //创建一个时间格式
        
        var format = "HH:mm"
        
        if calendar.isDateInYesterday(self) {
        
           format = "昨天 " + format
        }
        
        
        //是具体年份的时间
        
        
//        第一个是比较两个时间的年度差，是一个完整的年度差，例如：2013 09 08  到 2014 08 08  的差值是0，不算一年
        
//        calendar.components(<#T##unitFlags: NSCalendarUnit##NSCalendarUnit#>, fromDate: <#T##NSDate#>, toDate: <#T##NSDate#>, options: <#T##NSCalendarOptions#>)
        
//        第二个是取NSDate中时间的一个小单元,这样可以计算两个年度差，虽然没有满一年
//        calendar.components(<#T##unitFlags: NSCalendarUnit##NSCalendarUnit#>, fromDate: <#T##NSDate#>)
        
        let sYear = calendar.components(NSCalendarUnit.Year, fromDate: self).year
        
        let cYear = calendar.components(NSCalendarUnit.Year, fromDate: NSDate()).year
        
        let v = cYear - sYear
        
        //今年内的话，只显示月份与天数
        if v < 0 || (v == 0 && !calendar.isDateInYesterday(self)) {
        
           format = "MM-dd " + format
           
        }else if v > 0 {
        
           format = "yyyy-MM-dd " + format
        }
        
        
        //创建时间格式化器
        
        let formatter = NSDateFormatter()
        
        formatter.dateFormat = format
        
    
        //返回格式化后的时间
        
        return formatter.stringFromDate(self)
    
        
    
    }




}
